<?php

/**
 * 检测用户权限类
 * ©JEES
 */
namespace app\models;

use app\controllers\BaseController;
use app\models\cacheModel\AdminRoleModel as AdminRoleCacheModel;
use \app\models\tableModel\AdminRoleModel as AdminRoleDBModel;
use yii\base\ActionFilter;
use yii\base\ErrorException;
use yii\base\Exception;
use yii\web\Controller as ctrl;
use yii\web\ForbiddenHttpException;
use yii\web\HttpException;
use yii\web\Response;

class AuthFilter extends ActionFilter
{

    public function beforeAction($action)
    {

        // 看是否登陆了
        if (\Yii::$app->user->isGuest) {

            throw new ForbiddenHttpException('会话过期，请先登录您的账号', 403);
        }


        // 获取下当前登陆的用户角色ID
        $roleId = \Yii::$app->user->identity->role_id;

        // 如果是管理员角色直接执行
        if (AdminRoleDBModel::isSuper($roleId)) return true;

        // 获取下cache中的角色信息
        $adminRoleDetail = AdminRoleCacheModel::loadModel($roleId);
        $authList = $adminRoleDetail->getAuthRoteList();

        // 如果是空的就证明确实这个角色无权限 | 可能缓存没有 在getRoleInfo 方法已做从表内获取
        if (!$authList || empty($authList)) {

            throw new ForbiddenHttpException('您暂无任何权限', 400);
        }

        // 检测下当前要跳转的路由在列表中吗
        if (!in_array('/' . $action->controller->getRoute(), $authList)) {

            throw new ForbiddenHttpException('您暂无权限访问此页面', 400);
        }

        return true;
    }

    /**
     * 如果是首页的链接 进行角色监测跳转
     */
    public function checkIndex()
    {

        $ctrlClass = new ctrl('', '');

        // 判断当前是什么用户
        $groupId = \Yii::$app->user->identity->group;
        // ********** 1、[管理]用户走到相关接口 **********
        $admin = \Yii::$app->params['adminUGId'];
        if (in_array($groupId, $admin)) {

            $ctrlClass->redirect('/adminBench.html');
            return true;
        }

        // ********** 2、[商家]用户走到相关接口 **********
        $shop = \Yii::$app->params['shopUGId'];
        if (in_array($groupId, $shop)) {

            $ctrlClass->redirect('/shopBench.html');
            return true;
        }

        // ********** 3、[客服]用户走到相关接口 **********
        $shop = \Yii::$app->params['serviceUGId'];
        if (in_array($groupId, $shop)) {

            $ctrlClass->redirect('/serviceBench.html');
            return true;
        }

        // ********** 4、[其余的]用户走到[普通用户]接口 **********
        $ctrlClass->redirect('/userBench.html');

    }
}
